package com.hc.programming.tree;

import java.util.Arrays;

/**
 * 给定二叉树的根节点 root ，返回所有左叶子之和。
 * <p>
 * 示例 1：
 * <a href="./二叉树的层序遍历-示例1.png">示例1</a>
 * 输入: root = [3,9,20,null,null,15,7]
 * 输出: 24
 * 解释: 在这个二叉树中，有两个左叶子，分别是 9 和 15，所以返回 24
 * 示例 2:
 * 输入: root = [1]
 * 输出: 0
 * <p>
 * 提示:
 * 节点数在 [1, 1000] 范围内
 * -1000 <= Node.val <= 1000
 *
 * @author huangchao E-mail:fengquan8866@163.com
 * @version 创建时间：2024/10/14 22:36
 */
public class 左叶子之和 {
    public static void main(String[] args) {
        Integer[] arr = new Integer[]{3, 9, 20, null, null, 15, 7};
        TreeNode tree = TreeNode.tree(arr);
        System.out.println(Arrays.toString(arr) + "=24,--" + sumOfLeftLeaves(tree));
        arr = new Integer[]{1};
        tree = TreeNode.tree(arr);
        System.out.println(Arrays.toString(arr) + "=0,--" + sumOfLeftLeaves(tree));
    }

    public static int sumOfLeftLeaves(TreeNode root) {
        return 递归(root, false);
    }

    private static int 递归(TreeNode root, boolean b) {
        if (root == null) return 0;
        if (root.left == null && root.right == null && b) {
            return root.val;
        }
        int sum = 0;
        if (root.left != null)
            sum += 递归(root.left, true);
        if (root.right != null)
            sum += 递归(root.right, false);
        return sum;
    }
}
